/*
+---------------------------------------------------------------------+
| iThinkphp     | [ WE CAN DO IT JUST THINK ]                         |
+---------------------------------------------------------------------+
| Official site | http://www.ithinkphp.org/                           |
+---------------------------------------------------------------------+
| Author        | hello wf585858@yeah.net                             |
+---------------------------------------------------------------------+
| Repository    | https://gitee.com/wf5858585858/iThinkphp            |
+---------------------------------------------------------------------+
| Licensed      | http://www.apache.org/licenses/LICENSE-2.0 )        |
+---------------------------------------------------------------------+
*/

/*!
 * UEditor
 * version: ueditor
 * build: Wed Aug 10 2016 11:06:03 GMT+0800 (CST)
 */

(function () {

	(function () {
		UE = window.UE || {};
		var isIE = !!window.ActiveXObject;
		//定义utils工具
		var utils = {
			removeLastbs: function (url) {
				return url.replace(/\/$/, '')
			},
			extend      : function (t, s) {
				var a = arguments,
					notCover = this.isBoolean(a[a.length - 1]) ? a[a.length - 1] : false,
					len = this.isBoolean(a[a.length - 1]) ? a.length - 1 : a.length;
				for (var i = 1; i < len; i++)
				{
					var x = a[i];
					for (var k in x)
					{
						if (!notCover || !t.hasOwnProperty(k))
						{
							t[k] = x[k];
						}
					}
				}
				return t;
			},
			isIE        : isIE,
			cssRule     : isIE ? function (key, style, doc) {
				var indexList, index;
				doc = doc || document;
				if (doc.indexList)
				{
					indexList = doc.indexList;
				}
				else
				{
					indexList = doc.indexList = {};
				}
				var sheetStyle;
				if (!indexList[key])
				{
					if (style === undefined)
					{
						return ''
					}
					sheetStyle = doc.createStyleSheet('', index = doc.styleSheets.length);
					indexList[key] = index;
				}
				else
				{
					sheetStyle = doc.styleSheets[indexList[key]];
				}
				if (style === undefined)
				{
					return sheetStyle.cssText
				}
				sheetStyle.cssText = sheetStyle.cssText + '\n' + (style || '')
			} : function (key, style, doc) {
				doc = doc || document;
				var head = doc.getElementsByTagName('head')[0], node;
				if (!(node = doc.getElementById(key)))
				{
					if (style === undefined)
					{
						return ''
					}
					node = doc.createElement('style');
					node.id = key;
					head.appendChild(node)
				}
				if (style === undefined)
				{
					return node.innerHTML
				}
				if (style !== '')
				{
					node.innerHTML = node.innerHTML + '\n' + style;
				}
				else
				{
					head.removeChild(node)
				}
			},
			domReady    : function (onready) {
				var doc = window.document;
				if (doc.readyState === "complete")
				{
					onready();
				}
				else
				{
					if (isIE)
					{
						(function () {
							if (doc.isReady) return;
							try
							{
								doc.documentElement.doScroll("left");
							} catch (error)
							{
								setTimeout(arguments.callee, 0);
								return;
							}
							onready();
						})();
						window.attachEvent('onload', function () {
							onready()
						});
					}
					else
					{
						doc.addEventListener("DOMContentLoaded", function () {
							doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
							onready();
						}, false);
						window.addEventListener('load', function () {onready()}, false);
					}
				}

			},
			each        : function (obj, iterator, context) {
				if (obj == null) return;
				if (obj.length === +obj.length)
				{
					for (var i = 0, l = obj.length; i < l; i++)
					{
						if (iterator.call(context, obj[i], i, obj) === false)
							return false;
					}
				}
				else
				{
					for (var key in obj)
					{
						if (obj.hasOwnProperty(key))
						{
							if (iterator.call(context, obj[key], key, obj) === false)
								return false;
						}
					}
				}
			},
			inArray     : function (arr, item) {
				var index = -1;
				this.each(arr, function (v, i) {
					if (v === item)
					{
						index = i;
						return false;
					}
				});
				return index;
			},
			pushItem    : function (arr, item) {
				if (this.inArray(arr, item) == -1)
				{
					arr.push(item)
				}
			},
			trim        : function (str) {
				return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
			},
			indexOf     : function (array, item, start) {
				var index = -1;
				start = this.isNumber(start) ? start : 0;
				this.each(array, function (v, i) {
					if (i >= start && v === item)
					{
						index = i;
						return false;
					}
				});
				return index;
			},
			hasClass    : function (element, className) {
				className = className.replace(/(^[ ]+)|([ ]+$)/g, '').replace(/[ ]{2,}/g, ' ').split(' ');
				for (var i = 0, ci, cls = element.className; ci = className[i++];)
				{
					if (!new RegExp('\\b' + ci + '\\b', 'i').test(cls))
					{
						return false;
					}
				}
				return i - 1 == className.length;
			},
			addClass    : function (elm, classNames) {
				if (!elm) return;
				classNames = this.trim(classNames).replace(/[ ]{2,}/g, ' ').split(' ');
				for (var i = 0, ci, cls = elm.className; ci = classNames[i++];)
				{
					if (!new RegExp('\\b' + ci + '\\b').test(cls))
					{
						cls += ' ' + ci;
					}
				}
				elm.className = utils.trim(cls);
			},
			removeClass : function (elm, classNames) {
				classNames = this.isArray(classNames) ? classNames :
					this.trim(classNames).replace(/[ ]{2,}/g, ' ').split(' ');
				for (var i = 0, ci, cls = elm.className; ci = classNames[i++];)
				{
					cls = cls.replace(new RegExp('\\b' + ci + '\\b'), '')
				}
				cls = this.trim(cls).replace(/[ ]{2,}/g, ' ');
				elm.className = cls;
				!cls && elm.removeAttribute('className');
			},
			on          : function (element, type, handler) {
				var types = this.isArray(type) ? type : type.split(/\s+/),
					k = types.length;
				if (k) while (k--)
				{
					type = types[k];
					if (element.addEventListener)
					{
						element.addEventListener(type, handler, false);
					}
					else
					{
						if (!handler._d)
						{
							handler._d = {
								els: []
							};
						}
						var key = type + handler.toString(), index = utils.indexOf(handler._d.els, element);
						if (!handler._d[key] || index == -1)
						{
							if (index == -1)
							{
								handler._d.els.push(element);
							}
							if (!handler._d[key])
							{
								handler._d[key] = function (evt) {
									return handler.call(evt.srcElement, evt || window.event);
								};
							}


							element.attachEvent('on' + type, handler._d[key]);
						}
					}
				}
				element = null;
			},
			off         : function (element, type, handler) {
				var types = this.isArray(type) ? type : type.split(/\s+/),
					k = types.length;
				if (k) while (k--)
				{
					type = types[k];
					if (element.removeEventListener)
					{
						element.removeEventListener(type, handler, false);
					}
					else
					{
						var key = type + handler.toString();
						try
						{
							element.detachEvent('on' + type, handler._d ? handler._d[key] : handler);
						} catch (e)
						{}
						if (handler._d && handler._d[key])
						{
							var index = utils.indexOf(handler._d.els, element);
							if (index != -1)
							{
								handler._d.els.splice(index, 1);
							}
							handler._d.els.length == 0 && delete handler._d[key];
						}
					}
				}
			},
			loadFile    : function () {
				var tmpList = [];

				function getItem(doc, obj)
				{
					try
					{
						for (var i = 0, ci; ci = tmpList[i++];)
						{
							if (ci.doc === doc && ci.url == (obj.src || obj.href))
							{
								return ci;
							}
						}
					} catch (e)
					{
						return null;
					}

				}

				return function (doc, obj, fn) {
					var item = getItem(doc, obj);
					if (item)
					{
						if (item.ready)
						{
							fn && fn();
						}
						else
						{
							item.funs.push(fn)
						}
						return;
					}
					tmpList.push({
						doc : doc,
						url : obj.src || obj.href,
						funs: [fn]
					});
					if (!doc.body)
					{
						var html = [];
						for (var p in obj)
						{
							if (p == 'tag') continue;
							html.push(p + '="' + obj[p] + '"')
						}
						doc.write('<' + obj.tag + ' ' + html.join(' ') + ' ></' + obj.tag + '>');
						return;
					}
					if (obj.id && doc.getElementById(obj.id))
					{
						return;
					}
					var element = doc.createElement(obj.tag);
					delete obj.tag;
					for (var p in obj)
					{
						element.setAttribute(p, obj[p]);
					}
					element.onload = element.onreadystatechange = function () {
						if (!this.readyState || /loaded|complete/.test(this.readyState))
						{
							item = getItem(doc, obj);
							if (item.funs.length > 0)
							{
								item.ready = 1;
								for (var fi; fi = item.funs.pop();)
								{
									fi();
								}
							}
							element.onload = element.onreadystatechange = null;
						}
					};
					element.onerror = function () {
						throw Error('The load ' + (obj.href || obj.src) + ' fails,check the url')
					};
					doc.getElementsByTagName("head")[0].appendChild(element);
				}
			}()
		};
		utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object', 'Boolean'], function (v) {
			utils['is' + v] = function (obj) {
				return Object.prototype.toString.apply(obj) == '[object ' + v + ']';
			}
		});
		var parselist = {};
		UE.parse = {
			register: function (parseName, fn) {
				parselist[parseName] = fn;
			},
			load    : function (opt) {
				utils.each(parselist, function (v) {
					v.call(opt, utils);
				})
			}
		};
		uParse = function (selector, opt) {
			utils.domReady(function () {
				var contents;
				if (document.querySelectorAll)
				{
					contents = document.querySelectorAll(selector)
				}
				else
				{
					if (/^#/.test(selector))
					{
						contents = [document.getElementById(selector.replace(/^#/, ''))]
					}
					else if (/^\./.test(selector))
					{
						var contents = [];
						utils.each(document.getElementsByTagName('*'), function (node) {
							if (node.className && new RegExp('\\b' + selector.replace(/^\./, '') + '\\b', 'i').test(node.className))
							{
								contents.push(node)
							}
						})
					}
					else
					{
						contents = document.getElementsByTagName(selector)
					}
				}
				utils.each(contents, function (v) {
					UE.parse.load(utils.extend({root: v, selector: selector}, opt))
				})
			})
		}
	})();

	UE.parse.register('insertcode', function (utils) {
		var pres = this.root.getElementsByTagName('pre');
		if (pres.length)
		{
			if (typeof XRegExp == "undefined")
			{
				var jsurl, cssurl;
				if (this.rootPath !== undefined)
				{
					jsurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCore.js';
					cssurl = utils.removeLastbs(this.rootPath) + '/third-party/SyntaxHighlighter/shCoreDefault.css';
				}
				else
				{
					jsurl = this.highlightJsUrl;
					cssurl = this.highlightCssUrl;
				}
				utils.loadFile(document, {
					id  : "syntaxhighlighter_css",
					tag : "link",
					rel : "stylesheet",
					type: "text/css",
					href: cssurl
				});
				utils.loadFile(document, {
					id   : "syntaxhighlighter_js",
					src  : jsurl,
					tag  : "script",
					type : "text/javascript",
					defer: "defer"
				}, function () {
					utils.each(pres, function (pi) {
						if (pi && /brush/i.test(pi.className))
						{
							SyntaxHighlighter.highlight(pi);
						}
					});
				});
			}
			else
			{
				utils.each(pres, function (pi) {
					if (pi && /brush/i.test(pi.className))
					{
						SyntaxHighlighter.highlight(pi);
					}
				});
			}
		}

	});
	UE.parse.register('table', function (utils) {
		var me = this,
			root = this.root,
			tables = root.getElementsByTagName('table');
		if (tables.length)
		{
			var selector = this.selector;
			//追加默认的表格样式
			utils.cssRule('table',
				selector + ' table.noBorderTable td,' +
				selector + ' table.noBorderTable th,' +
				selector + ' table.noBorderTable caption{border:1px dashed #ddd !important}' +
				selector + ' table.sortEnabled tr.firstRow th,' + selector + ' table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;' +
				'background-position: center right; background-image:url(' + this.rootPath + 'themes/default/images/sortable.png);}' +
				selector + ' table.sortEnabled tr.firstRow th:hover,' + selector + ' table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}' +
				selector + ' table{margin-bottom:10px;border-collapse:collapse;display:table;}' +
				selector + ' td,' + selector + ' th{ background:white; padding: 5px 10px;border: 1px solid #DDD;}' +
				selector + ' caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' +
				selector + ' th{border-top:1px solid #BBB;background:#F7F7F7;}' +
				selector + ' table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}' +
				selector + ' tr.ue-table-interlace-color-single td{ background: #fcfcfc; }' +
				selector + ' tr.ue-table-interlace-color-double td{ background: #f7faff; }' +
				selector + ' td p{margin:0;padding:0;}',
				document);
			//填充空的单元格

			utils.each('td th caption'.split(' '), function (tag) {
				var cells = root.getElementsByTagName(tag);
				cells.length && utils.each(cells, function (node) {
					if (!node.firstChild)
					{
						node.innerHTML = '&nbsp;';

					}
				})
			});

			//表格可排序
			var tables = root.getElementsByTagName('table');
			utils.each(tables, function (table) {
				if (/\bsortEnabled\b/.test(table.className))
				{
					utils.on(table, 'click', function (e) {
						var target = e.target || e.srcElement,
							cell = findParentByTagName(target, ['td', 'th']);
						var table = findParentByTagName(target, 'table'),
							colIndex = utils.indexOf(table.rows[0].cells, cell),
							sortType = table.getAttribute('data-sort-type');
						if (colIndex != -1)
						{
							sortTable(table, colIndex, me.tableSortCompareFn || sortType);
							updateTable(table);
						}
					});
				}
			});

			//按照标签名查找父节点
			function findParentByTagName(target, tagNames)
			{
				var i, current = target;
				tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];
				while (current)
				{
					for (i = 0; i < tagNames.length; i++)
					{
						if (current.tagName == tagNames[i].toUpperCase()) return current;
					}
					current = current.parentNode;
				}
				return null;
			}

			//表格排序
			function sortTable(table, sortByCellIndex, compareFn)
			{
				var rows = table.rows,
					trArray = [],
					flag = rows[0].cells[0].tagName === "TH",
					lastRowIndex = 0;

				for (var i = 0, len = rows.length; i < len; i++)
				{
					trArray[i] = rows[i];
				}

				var Fn = {
					'reversecurrent': function (td1, td2) {
						return 1;
					},
					'orderbyasc'    : function (td1, td2) {
						var value1 = td1.innerText || td1.textContent,
							value2 = td2.innerText || td2.textContent;
						return value1.localeCompare(value2);
					},
					'reversebyasc'  : function (td1, td2) {
						var value1 = td1.innerHTML,
							value2 = td2.innerHTML;
						return value2.localeCompare(value1);
					},
					'orderbynum'    : function (td1, td2) {
						var value1 = td1[utils.isIE ? 'innerText' : 'textContent'].match(/\d+/),
							value2 = td2[utils.isIE ? 'innerText' : 'textContent'].match(/\d+/);
						if (value1) value1 = +value1[0];
						if (value2) value2 = +value2[0];
						return (value1 || 0) - (value2 || 0);
					},
					'reversebynum'  : function (td1, td2) {
						var value1 = td1[utils.isIE ? 'innerText' : 'textContent'].match(/\d+/),
							value2 = td2[utils.isIE ? 'innerText' : 'textContent'].match(/\d+/);
						if (value1) value1 = +value1[0];
						if (value2) value2 = +value2[0];
						return (value2 || 0) - (value1 || 0);
					}
				};

				//对表格设置排序的标记data-sort-type
				table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn : '');

				//th不参与排序
				flag && trArray.splice(0, 1);
				trArray = sort(trArray, function (tr1, tr2) {
					var result;
					if (compareFn && typeof compareFn === "function")
					{
						result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
					}
					else if (compareFn && typeof compareFn === "number")
					{
						result = 1;
					}
					else if (compareFn && typeof compareFn === "string" && Fn[compareFn])
					{
						result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
					}
					else
					{
						result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
					}
					return result;
				});
				var fragment = table.ownerDocument.createDocumentFragment();
				for (var j = 0, len = trArray.length; j < len; j++)
				{
					fragment.appendChild(trArray[j]);
				}
				var tbody = table.getElementsByTagName("tbody")[0];
				if (!lastRowIndex)
				{
					tbody.appendChild(fragment);
				}
				else
				{
					tbody.insertBefore(fragment, rows[lastRowIndex - range.endRowIndex + range.beginRowIndex - 1])
				}
			}

			//冒泡排序
			function sort(array, compareFn)
			{
				compareFn = compareFn || function (item1, item2) { return item1.localeCompare(item2);};
				for (var i = 0, len = array.length; i < len; i++)
				{
					for (var j = i, length = array.length; j < length; j++)
					{
						if (compareFn(array[i], array[j]) > 0)
						{
							var t = array[i];
							array[i] = array[j];
							array[j] = t;
						}
					}
				}
				return array;
			}

			//更新表格
			function updateTable(table)
			{
				//给第一行设置firstRow的样式名称,在排序图标的样式上使用到
				if (!utils.hasClass(table.rows[0], "firstRow"))
				{
					for (var i = 1; i < table.rows.length; i++)
					{
						utils.removeClass(table.rows[i], "firstRow");
					}
					utils.addClass(table.rows[0], "firstRow");
				}
			}
		}
	});
	UE.parse.register('charts', function (utils) {

		utils.cssRule('chartsContainerHeight', '.edui-chart-container { height:' + (this.chartContainerHeight || 300) + 'px}');
		var resourceRoot = this.rootPath,
			containers = this.root,
			sources = null;

		//不存在指定的根路径， 则直接退出
		if (!resourceRoot)
		{
			return;
		}

		if (sources = parseSources())
		{

			loadResources();

		}


		function parseSources()
		{

			if (!containers)
			{
				return null;
			}

			return extractChartData(containers);

		}

		/**
		 * 提取数据
		 */
		function extractChartData(rootNode)
		{

			var data = [],
				tables = rootNode.getElementsByTagName("table");

			for (var i = 0, tableNode; tableNode = tables[i]; i++)
			{

				if (tableNode.getAttribute("data-chart") !== null)
				{

					data.push(formatData(tableNode));

				}

			}

			return data.length ? data : null;

		}

		function formatData(tableNode)
		{

			var meta = tableNode.getAttribute("data-chart"),
				metaConfig = {},
				data = [];

			//提取table数据
			for (var i = 0, row; row = tableNode.rows[i]; i++)
			{

				var rowData = [];

				for (var j = 0, cell; cell = row.cells[j]; j++)
				{

					var value = (cell.innerText || cell.textContent || '');
					rowData.push(cell.tagName == 'TH' ? value : (value | 0));

				}

				data.push(rowData);

			}

			//解析元信息
			meta = meta.split(";");
			for (var i = 0, metaData; metaData = meta[i]; i++)
			{

				metaData = metaData.split(":");
				metaConfig[metaData[0]] = metaData[1];

			}


			return {
				table: tableNode,
				meta : metaConfig,
				data : data
			};

		}

		//加载资源
		function loadResources()
		{

			loadJQuery();

		}

		function loadJQuery()
		{

			//不存在jquery， 则加载jquery
			if (!window.jQuery)
			{

				utils.loadFile(document, {
					src  : resourceRoot + "/third-party/jquery-1.10.2.min.js",
					tag  : "script",
					type : "text/javascript",
					defer: "defer"
				}, function () {

					loadHighcharts();

				});

			}
			else
			{

				loadHighcharts();

			}

		}

		function loadHighcharts()
		{

			//不存在Highcharts， 则加载Highcharts
			if (!window.Highcharts)
			{

				utils.loadFile(document, {
					src  : resourceRoot + "/third-party/highcharts/highcharts.js",
					tag  : "script",
					type : "text/javascript",
					defer: "defer"
				}, function () {

					loadTypeConfig();

				});

			}
			else
			{

				loadTypeConfig();

			}

		}

		//加载图表差异化配置文件
		function loadTypeConfig()
		{

			utils.loadFile(document, {
				src  : resourceRoot + "/dialogs/charts/chart.config.js",
				tag  : "script",
				type : "text/javascript",
				defer: "defer"
			}, function () {

				render();

			});

		}

		//渲染图表
		function render()
		{

			var config = null,
				chartConfig = null,
				container = null;

			for (var i = 0, len = sources.length; i < len; i++)
			{

				config = sources[i];

				chartConfig = analysisConfig(config);

				container = createContainer(config.table);

				renderChart(container, typeConfig[config.meta.chartType], chartConfig);

			}


		}

		/**
		 * 渲染图表
		 * @param container 图表容器节点对象
		 * @param typeConfig 图表类型配置
		 * @param config 图表通用配置
		 * */
		function renderChart(container, typeConfig, config)
		{


			$(container).highcharts($.extend({}, typeConfig, {

				credits  : {
					enabled: false
				},
				exporting: {
					enabled: false
				},
				title    : {
					text: config.title,
					x   : -20 //center
				},
				subtitle : {
					text: config.subTitle,
					x   : -20
				},
				xAxis    : {
					title     : {
						text: config.xTitle
					},
					categories: config.categories
				},
				yAxis    : {
					title    : {
						text: config.yTitle
					},
					plotLines: [{
						value: 0,
						width: 1,
						color: '#808080'
					}]
				},
				tooltip  : {
					enabled    : true,
					valueSuffix: config.suffix
				},
				legend   : {
					layout       : 'vertical',
					align        : 'right',
					verticalAlign: 'middle',
					borderWidth  : 1
				},
				series   : config.series

			}));

		}

		/**
		 * 创建图表的容器
		 * 新创建的容器会替换掉对应的table对象
		 * */
		function createContainer(tableNode)
		{

			var container = document.createElement("div");
			container.className = "edui-chart-container";

			tableNode.parentNode.replaceChild(container, tableNode);

			return container;

		}

		//根据config解析出正确的类别和图表数据信息
		function analysisConfig(config)
		{

			var series = [],
				//数据类别
				categories = [],
				result = [],
				data = config.data,
				meta = config.meta;

			//数据对齐方式为相反的方式， 需要反转数据
			if (meta.dataFormat != "1")
			{

				for (var i = 0, len = data.length; i < len; i++)
				{

					for (var j = 0, jlen = data[i].length; j < jlen; j++)
					{

						if (!result[j])
						{
							result[j] = [];
						}

						result[j][i] = data[i][j];

					}

				}

				data = result;

			}

			result = {};

			//普通图表
			if (meta.chartType != typeConfig.length - 1)
			{

				categories = data[0].slice(1);

				for (var i = 1, curData; curData = data[i]; i++)
				{
					series.push({
						name: curData[0],
						data: curData.slice(1)
					});
				}

				result.series = series;
				result.categories = categories;
				result.title = meta.title;
				result.subTitle = meta.subTitle;
				result.xTitle = meta.xTitle;
				result.yTitle = meta.yTitle;
				result.suffix = meta.suffix;

			}
			else
			{

				var curData = [];

				for (var i = 1, len = data[0].length; i < len; i++)
				{

					curData.push([data[0][i], data[1][i] | 0]);

				}

				//饼图
				series[0] = {
					type: 'pie',
					name: meta.tip,
					data: curData
				};

				result.series = series;
				result.title = meta.title;
				result.suffix = meta.suffix;

			}

			return result;

		}

	});
	UE.parse.register('background', function (utils) {
		var me = this,
			root = me.root,
			p = root.getElementsByTagName('p'),
			styles;

		for (var i = 0, ci; ci = p[i++];)
		{
			styles = ci.getAttribute('data-background');
			if (styles)
			{
				ci.parentNode.removeChild(ci);
			}
		}

		//追加默认的表格样式
		styles && utils.cssRule('ueditor_background', me.selector + '{' + styles + '}', document);
	});
	UE.parse.register('list', function (utils) {
		var customCss = [],
			customStyle = {
				'cn'  : 'cn-1-',
				'cn1' : 'cn-2-',
				'cn2' : 'cn-3-',
				'num' : 'num-1-',
				'num1': 'num-2-',
				'num2': 'num-3-',
				'dash': 'dash',
				'dot' : 'dot'
			};


		utils.extend(this, {
			liiconpath            : 'http://bs.baidu.com/listicon/',
			listDefaultPaddingLeft: '20'
		});

		var root = this.root,
			ols = root.getElementsByTagName('ol'),
			uls = root.getElementsByTagName('ul'),
			selector = this.selector;

		if (ols.length)
		{
			applyStyle.call(this, ols);
		}

		if (uls.length)
		{
			applyStyle.call(this, uls);
		}

		if (ols.length || uls.length)
		{
			customCss.push(selector + ' .list-paddingleft-1{padding-left:0}');
			customCss.push(selector + ' .list-paddingleft-2{padding-left:' + this.listDefaultPaddingLeft + 'px}');
			customCss.push(selector + ' .list-paddingleft-3{padding-left:' + this.listDefaultPaddingLeft * 2 + 'px}');

			utils.cssRule('list', selector + ' ol,' + selector + ' ul{margin:0;padding:0;}li{clear:both;}' + customCss.join('\n'), document);
		}

		function applyStyle(nodes)
		{
			var T = this;
			utils.each(nodes, function (list) {
				if (list.className && /custom_/i.test(list.className))
				{
					var listStyle = list.className.match(/custom_(\w+)/)[1];
					if (listStyle == 'dash' || listStyle == 'dot')
					{
						utils.pushItem(customCss, selector + ' li.list-' + customStyle[listStyle] + '{background-image:url(' + T.liiconpath + customStyle[listStyle] + '.gif)}');
						utils.pushItem(customCss, selector + ' ul.custom_' + listStyle + '{list-style:none;} ' + selector + ' ul.custom_' + listStyle + ' li{background-position:0 3px;background-repeat:no-repeat}');

					}
					else
					{
						var index = 1;
						utils.each(list.childNodes, function (li) {
							if (li.tagName == 'LI')
							{
								utils.pushItem(customCss, selector + ' li.list-' + customStyle[listStyle] + index + '{background-image:url(' + T.liiconpath + 'list-' + customStyle[listStyle] + index + '.gif)}');
								index++;
							}
						});
						utils.pushItem(customCss, selector + ' ol.custom_' + listStyle + '{list-style:none;}' + selector + ' ol.custom_' + listStyle + ' li{background-position:0 3px;background-repeat:no-repeat}');
					}
					switch (listStyle)
					{
						case 'cn':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-1{padding-left:25px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-2{padding-left:40px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-3{padding-left:55px}');
							break;
						case 'cn1':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-1{padding-left:30px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-2{padding-left:40px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-3{padding-left:55px}');
							break;
						case 'cn2':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-1{padding-left:40px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-2{padding-left:55px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-3{padding-left:68px}');
							break;
						case 'num':
						case 'num1':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-1{padding-left:25px}');
							break;
						case 'num2':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-1{padding-left:35px}');
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft-2{padding-left:40px}');
							break;
						case 'dash':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft{padding-left:35px}');
							break;
						case 'dot':
							utils.pushItem(customCss, selector + ' li.list-' + listStyle + '-paddingleft{padding-left:20px}');
					}
				}
			});
		}


	});
	UE.parse.register('vedio', function (utils) {
		var video = this.root.getElementsByTagName('video'),
			audio = this.root.getElementsByTagName('audio');

		document.createElement('video');
		document.createElement('audio');
		if (video.length || audio.length)
		{
			var sourcePath = utils.removeLastbs(this.rootPath),
				jsurl = sourcePath + '/third-party/video-js/video.js',
				cssurl = sourcePath + '/third-party/video-js/video-js.min.css',
				swfUrl = sourcePath + '/third-party/video-js/video-js.swf';

			if (window.videojs)
			{
				videojs.autoSetup();
			}
			else
			{
				utils.loadFile(document, {
					id  : "video_css",
					tag : "link",
					rel : "stylesheet",
					type: "text/css",
					href: cssurl
				});
				utils.loadFile(document, {
					id  : "video_js",
					src : jsurl,
					tag : "script",
					type: "text/javascript"
				}, function () {
					videojs.options.flash.swf = swfUrl;
					videojs.autoSetup();
				});
			}

		}
	});

})();
